On 6/24/20 3:34 PM, Sami Mujawar wrote:
The BaseSerialPortLib16550 library does not implement
a constructor. This prevents the correct constructor
invocation order for dependent libraries.
e.g. A PlatformHookLib (for the Serial Port) may have
a dependency on retrieving data from a Hob. A Hob
library implementation may configure its initial state
in the HobLib constructor. Since BaseSerialPortLib16550
does not implement a constructor, the Basetools do not
resolve the correct order for constructor invocation.
To fix this, add an empty constructor to the serial port
library BaseSerialPortLib16550.
Signed-off-by: Sami Mujawar <sami.muja...@arm.com>
Acked-by: Ard Biesheuvel <ard.biesheu...@arm.com>
Note to maintainers:
this works around a long standing BaseTools bug where constructor
dependencies do not propagate through a library that lacks a constructor.
For instance, in the following case
LibA depends on LibB depends on LibC
the constructors are *only* guaranteed to be invoked in the correct
order (LibC, then LibB, then LibA) if LibB has a constructor in the
first place, otherwise, the remaining constructors for LibA and LibC
could be emitted in any order.
---
MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c | 17
+++++++++++++++++
MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf | 3
+++
2 files changed, 20 insertions(+)
diff --git
a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c
b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c
index
9cb50dd80d5634ab2aa6d68bf5ca7fb891463eef..0fd1382ee83c9de09d8250830bd9569056fcee2f
100644
--- a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c
+++ b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c
@@ -4,6 +4,7 @@
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2018, AMD Incorporated. All rights reserved.<BR>
+ Copyright (c) 2020, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -1102,3 +1103,19 @@ SerialPortSetAttributes (
return RETURN_SUCCESS;
}
+/** Base Serial Port 16550 Library Constructor
+
+ @retval RETURN_SUCCESS Success.
+*/
+EFI_STATUS
+EFIAPI
+BaseSerialPortLib16550 (
+ VOID
+ )
+{
+ // Nothing to do here. This constructor is added to
+ // enable the chain of constructor invocation for
+ // dependent libraries.
+ return RETURN_SUCCESS;
+}
+
diff --git
a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
index
8b4ae3f1d4ee1e2e9a8b81eab4c900541ce8cfb6..92b7a8b7896a305d2ce22589f8a9593618d37bb7
100644
--- a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+++ b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
@@ -2,6 +2,8 @@
# SerialPortLib instance for 16550 UART.
#
# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2020, ARM Limited. All rights reserved.
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -14,6 +16,7 @@ [Defines]
MODULE_TYPE = BASE
VERSION_STRING = 1.1
LIBRARY_CLASS = SerialPortLib
+ CONSTRUCTOR = BaseSerialPortLib16550
[Packages]
MdePkg/MdePkg.dec
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#61719): https://edk2.groups.io/g/devel/message/61719
Mute This Topic: https://groups.io/mt/75081484/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-