[edk2-devel] [PATCH v5 07/15] MdeModulePkg: Fix constructor invocation ordering

Sami Mujawar posted 15 patches 5 years, 4 months ago
[edk2-devel] [PATCH v5 07/15] MdeModulePkg: Fix constructor invocation ordering
Posted by Sami Mujawar 5 years, 4 months ago
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.mujawar@arm.com>
Acked-by: Ard Biesheuvel <Ard.Biesheuvel@arm.com>
---

Notes:
    v5:
     - Fix function documentation to match doxygen style.             [Sami]
       Ref: https://edk2.groups.io/g/devel/message/62148
    
    v4:
      - No code change, resending patch with v4 series.               [Sami]
        Ref: https://edk2.groups.io/g/devel/topic/75081484

 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..f10b5894663a979873427cffa84a37b3064c623e 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
-- 
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#65857): https://edk2.groups.io/g/devel/message/65857
Mute This Topic: https://groups.io/mt/77270945/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v5 07/15] MdeModulePkg: Fix constructor invocation ordering
Posted by Wu, Hao A 5 years, 4 months ago
Acked-by: Hao A Wu <hao.a.wu@intel.com>

Best Regards,
Hao Wu

> -----Original Message-----
> From: Sami Mujawar <sami.mujawar@arm.com>
> Sent: Saturday, October 3, 2020 5:14 AM
> To: devel@edk2.groups.io
> Cc: Sami Mujawar <sami.mujawar@arm.com>; ard.biesheuvel@arm.com;
> leif@nuviainc.com; lersek@redhat.com; Wang, Jian J <jian.j.wang@intel.com>;
> Wu, Hao A <hao.a.wu@intel.com>; Alexandru.Elisei@arm.com;
> Andre.Przywara@arm.com; Matteo.Carlini@arm.com; Ben.Adderson@arm.com;
> nd@arm.com
> Subject: [PATCH v5 07/15] MdeModulePkg: Fix constructor invocation ordering
> 
> 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.mujawar@arm.com>
> Acked-by: Ard Biesheuvel <Ard.Biesheuvel@arm.com>
> ---
> 
> Notes:
>     v5:
>      - Fix function documentation to match doxygen style.             [Sami]
>        Ref: https://edk2.groups.io/g/devel/message/62148
> 
>     v4:
>       - No code change, resending patch with v4 series.               [Sami]
>         Ref: https://edk2.groups.io/g/devel/topic/75081484
> 
>  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..f10b5894663a979873427cffa8
> 4a37b3064c623e 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..92b7a8b7896a305d2ce22589f
> 8a9593618d37bb7 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
> --
> 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#65877): https://edk2.groups.io/g/devel/message/65877
Mute This Topic: https://groups.io/mt/77270945/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-