[haiku-commits] haiku: hrev56220 - src/system/runtime_loader

  • From: Jérôme Duval <jerome.duval@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 28 Jun 2022 06:02:05 +0000 (UTC)

hrev56220 adds 1 changeset to branch 'master'
old head: 6c478b54f65d618f528b9b8b747c5e80d4d2bc95
new head: 1e68c512dab5b5601325479cdd9b0a533763cbb1
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=1e68c512dab5+%5E6c478b54f65d

----------------------------------------------------------------------------

1e68c512dab5: runtime_loader: accept type STT_FUNC when STT_OBJECT is requested
  
  trying to load a PIE executable produced by golang show the following (for 
pthread_create)
      12: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  UND pthread_create
   12655: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND pthread_create
  
  It's the same for Linux or Solaris, so I suppose we're being too picky.
  
  Change-Id: Ibe817c231365aba8b2eb88eb3f556d2bd1db384a
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/5392
  Tested-by: Commit checker robot <no-reply+buildbot@xxxxxxxxxxxx>
  Reviewed-by: Jérôme Duval <jerome.duval@xxxxxxxxx>

                                   [ Jérôme Duval <jerome.duval@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev56220
Commit:      1e68c512dab5b5601325479cdd9b0a533763cbb1
URL:         https://git.haiku-os.org/haiku/commit/?id=1e68c512dab5
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Tue Jun 21 12:22:43 2022 UTC

----------------------------------------------------------------------------

1 file changed, 4 insertions(+), 5 deletions(-)
src/system/runtime_loader/elf_symbol_lookup.cpp | 9 ++++-----

----------------------------------------------------------------------------

diff --git a/src/system/runtime_loader/elf_symbol_lookup.cpp 
b/src/system/runtime_loader/elf_symbol_lookup.cpp
index 4a46c6be99..a63b7ea3c7 100644
--- a/src/system/runtime_loader/elf_symbol_lookup.cpp
+++ b/src/system/runtime_loader/elf_symbol_lookup.cpp
@@ -127,7 +127,7 @@ find_symbol(image_t* image, const SymbolLookupInfo& 
lookupInfo, bool allowLocal)
                        uint32 type = symbol->Type();
                        if ((lookupInfo.type == B_SYMBOL_TYPE_TEXT && type != 
STT_FUNC)
                                || (lookupInfo.type == B_SYMBOL_TYPE_DATA
-                                       && type != STT_OBJECT)) {
+                                       && type != STT_OBJECT && type != 
STT_FUNC)) {
                                continue;
                        }
 
@@ -495,8 +495,6 @@ resolve_symbol(image_t* rootImage, image_t* image, elf_sym* 
sym,
        int32 type = B_SYMBOL_TYPE_ANY;
        if (sym->Type() == STT_FUNC)
                type = B_SYMBOL_TYPE_TEXT;
-       else if (sym->Type() == STT_OBJECT)
-               type = B_SYMBOL_TYPE_DATA;
 
        if (sym->Bind() == STB_LOCAL) {
                // Local symbols references are always resolved to the given 
symbol.
@@ -537,8 +535,9 @@ resolve_symbol(image_t* rootImage, image_t* image, elf_sym* 
sym,
                        sharedImage = NULL;
                }
        } else if (sym->Type() != STT_NOTYPE
-               && sym->Type() != sharedSym->Type()) {
-               // symbol not of the requested type
+               && sym->Type() != sharedSym->Type()
+               && (sym->Type() != STT_OBJECT || sharedSym->Type() != 
STT_FUNC)) {
+               // symbol not of the requested type, except object which can 
match function
                lookupError = ERROR_WRONG_TYPE;
                sharedImage = NULL;
        } else if (sharedSym->Bind() != STB_GLOBAL


Other related posts:

  • » [haiku-commits] haiku: hrev56220 - src/system/runtime_loader - Jérôme Duval