[Bug c/14141] New: static functions incorrectly generate multiple function descriptors

jejb at steeleye dot com gcc-bugzilla@gcc.gnu.org
Fri Feb 13 15:12:00 GMT 2004


the 64 bit compiler is only used to generate kernels for linux (the particular
kernel I debugged this on is 2.6.3-rc1-pa2) so I don't have a user level
compileable example.

The problem arises because a particular piece of code in mm/shmap.c has a
function pointer comparison:

if (inode->i_op->truncate == shmem_truncate) 

Which is always evaluating false.  (shmem_truncate is a static function in shmem.c)

When I check, the Elf64_Fptr for each is different, but the address of the
function is the same.  hppa64 is supposed to have the OPD rule where there's
only one function descriptor per function, so we can evaluate this comparison by
comparing the addresses of the function descriptors.

The value of the function descriptor is assigned like this later in the same file:

static struct inode_operations shmem_symlink_inode_operations = {
        .truncate       = shmem_truncate,
        .readlink       = shmem_readlink,
        .follow_link    = shmem_follow_link,
};


As a test, if the function shmem_truncate is made unstatic, the comparison does
work successfully.

-- 
           Summary: static functions incorrectly generate multiple function
                    descriptors
           Product: gcc
           Version: 3.3.3
            Status: UNCONFIRMED
          Severity: critical
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jejb at steeleye dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: hppa-linux
  GCC host triplet: hppa-linux
GCC target triplet: hppa64-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14141



More information about the Gcc-bugs mailing list