<reponame>CyberQueenMara/baseband-research
##############################################################################
# Copyright (c) 2007 Open Kernel Labs, Inc. (Copyright Holder).
# All rights reserved.
# 
# 1. Redistribution and use of OKL4 (Software) in source and binary
# forms, with or without modification, are permitted provided that the
# following conditions are met:
# 
#     (a) Redistributions of source code must retain this clause 1
#         (including paragraphs (a), (b) and (c)), clause 2 and clause 3
#         (Licence Terms) and the above copyright notice.
# 
#     (b) Redistributions in binary form must reproduce the above
#         copyright notice and the Licence Terms in the documentation and/or
#         other materials provided with the distribution.
# 
#     (c) Redistributions in any form must be accompanied by information on
#         how to obtain complete source code for:
#        (i) the Software; and
#        (ii) all accompanying software that uses (or is intended to
#        use) the Software whether directly or indirectly.  Such source
#        code must:
#        (iii) either be included in the distribution or be available
#        for no more than the cost of distribution plus a nominal fee;
#        and
#        (iv) be licensed by each relevant holder of copyright under
#        either the Licence Terms (with an appropriate copyright notice)
#        or the terms of a licence which is approved by the Open Source
#        Initative.  For an executable file, "complete source code"
#        means the source code for all modules it contains and includes
#        associated build and other files reasonably required to produce
#        the executable.
# 
# 2. THIS SOFTWARE IS PROVIDED ``AS IS'' AND, TO THE EXTENT PERMITTED BY
# LAW, ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
# PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED.  WHERE ANY WARRANTY IS
# IMPLIED AND IS PREVENTED BY LAW FROM BEING DISCLAIMED THEN TO THE
# EXTENT PERMISSIBLE BY LAW: (A) THE WARRANTY IS READ DOWN IN FAVOUR OF
# THE COPYRIGHT HOLDER (AND, IN THE CASE OF A PARTICIPANT, THAT
# PARTICIPANT) AND (B) ANY LIMITATIONS PERMITTED BY LAW (INCLUDING AS TO
# THE EXTENT OF THE WARRANTY AND THE REMEDIES AVAILABLE IN THE EVENT OF
# BREACH) ARE DEEMED PART OF THIS LICENCE IN A FORM MOST FAVOURABLE TO
# THE COPYRIGHT HOLDER (AND, IN THE CASE OF A PARTICIPANT, THAT
# PARTICIPANT). IN THE LICENCE TERMS, "PARTICIPANT" INCLUDES EVERY
# PERSON WHO HAS CONTRIBUTED TO THE SOFTWARE OR WHO HAS BEEN INVOLVED IN
# THE DISTRIBUTION OR DISSEMINATION OF THE SOFTWARE.
# 
# 3. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY OTHER PARTICIPANT BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

"""
This file contains get_sections which extracts the names of sections 
from a list of Elf Files

It also returns the names of any files that were not ELF files and 
thus could not be opened
"""

from elf.core import PreparedElfFile
from elf.constants import ElfFormatError, SHF_ALLOC

def get_section_names(objects):
    sections = []
    not_elf = []

    for o in objects:
        try:
            elf = PreparedElfFile(filename=o)
            for section in elf.sections:
                if section.name not in sections:
                    if section.flags & SHF_ALLOC:
                        sections.append(section.name)
        except ElfFormatError:
            # some toolchains pass libgcc here, which shouldn't be treated as an additional
            # linker script, as not_elf is destined to be
            if o[-2:] != ".a":
                not_elf.append(o)

    return (sections, not_elf)

def wildcard_match(section, pattern):
    j = 0
    for i in range(len(pattern)):
        if pattern[i] == '?':
            j+=1
            continue
        if pattern[i] == '*':
            i+=1
            if i >= len(pattern):
                return True
            if j >= len(section):
                return False
            for k in range(j, len(section)):
                if wildcard_match(section[k:], pattern[i:]):
                    return True
            return False
        if j >= len(section):
            return False
        if pattern[i] != section[j]:
            return False
        j+=1
    if j == len(section):
        return True
    return False

def remove_sections_wildcard(orphaned_sections, pattern):
    remove = []
    for section in orphaned_sections:
       if wildcard_match(section, pattern):
          remove.append(section) 

    for section in remove:
        orphaned_sections.remove(section)


##############################################################################
# Copyright (c) 2007 Open Kernel Labs, Inc. (Copyright Holder).
# All rights reserved.
# 
# 1. Redistribution and use of OKL4 (Software) in source and binary
# forms, with or without modification, are permitted provided that the
# following conditions are met:
# 
#     (a) Redistributions of source code must retain this clause 1
#         (including paragraphs (a), (b) and (c)), clause 2 and clause 3
#         (Licence Terms) and the above copyright notice.
# 
#     (b) Redistributions in binary form must reproduce the above
#         copyright notice and the Licence Terms in the documentation and/or
#         other materials provided with the distribution.
# 
#     (c) Redistributions in any form must be accompanied by information on
#         how to obtain complete source code for:
#        (i) the Software; and
#        (ii) all accompanying software that uses (or is intended to
#        use) the Software whether directly or indirectly.  Such source
#        code must:
#        (iii) either be included in the distribution or be available
#        for no more than the cost of distribution plus a nominal fee;
#        and
#        (iv) be licensed by each relevant holder of copyright under
#        either the Licence Terms (with an appropriate copyright notice)
#        or the terms of a licence which is approved by the Open Source
#        Initative.  For an executable file, "complete source code"
#        means the source code for all modules it contains and includes
#        associated build and other files reasonably required to produce
#        the executable.
# 
# 2. THIS SOFTWARE IS PROVIDED ``AS IS'' AND, TO THE EXTENT PERMITTED BY
# LAW, ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
# PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED.  WHERE ANY WARRANTY IS
# IMPLIED AND IS PREVENTED BY LAW FROM BEING DISCLAIMED THEN TO THE
# EXTENT PERMISSIBLE BY LAW: (A) THE WARRANTY IS READ DOWN IN FAVOUR OF
# THE COPYRIGHT HOLDER (AND, IN THE CASE OF A PARTICIPANT, THAT
# PARTICIPANT) AND (B) ANY LIMITATIONS PERMITTED BY LAW (INCLUDING AS TO
# THE EXTENT OF THE WARRANTY AND THE REMEDIES AVAILABLE IN THE EVENT OF
# BREACH) ARE DEEMED PART OF THIS LICENCE IN A FORM MOST FAVOURABLE TO
# THE COPYRIGHT HOLDER (AND, IN THE CASE OF A PARTICIPANT, THAT
# PARTICIPANT). IN THE LICENCE TERMS, "PARTICIPANT" INCLUDES EVERY
# PERSON WHO HAS CONTRIBUTED TO THE SOFTWARE OR WHO HAS BEEN INVOLVED IN
# THE DISTRIBUTION OR DISSEMINATION OF THE SOFTWARE.
# 
# 3. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY OTHER PARTICIPANT BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

"""
This file contains get_sections which extracts the names of sections 
from a list of Elf Files

It also returns the names of any files that were not ELF files and 
thus could not be opened
"""

from elf.core import PreparedElfFile
from elf.constants import ElfFormatError, SHF_ALLOC

def get_section_names(objects):
    sections = []
    not_elf = []

    for o in objects:
        try:
            elf = PreparedElfFile(filename=o)
            for section in elf.sections:
                if section.name not in sections:
                    if section.flags & SHF_ALLOC:
                        sections.append(section.name)
        except ElfFormatError:
            # some toolchains pass libgcc here, which shouldn't be treated as an additional
            # linker script, as not_elf is destined to be
            if o[-2:] != ".a":
                not_elf.append(o)

    return (sections, not_elf)

def wildcard_match(section, pattern):
    j = 0
    for i in range(len(pattern)):
        if pattern[i] == '?':
            j+=1
            continue
        if pattern[i] == '*':
            i+=1
            if i >= len(pattern):
                return True
            if j >= len(section):
                return False
            for k in range(j, len(section)):
                if wildcard_match(section[k:], pattern[i:]):
                    return True
            return False
        if j >= len(section):
            return False
        if pattern[i] != section[j]:
            return False
        j+=1
    if j == len(section):
        return True
    return False

def remove_sections_wildcard(orphaned_sections, pattern):
    remove = []
    for section in orphaned_sections:
       if wildcard_match(section, pattern):
          remove.append(section) 

    for section in remove:
        orphaned_sections.remove(section)
############################################################################## # Copyright (c) 2007 Open Kernel Labs, Inc. (Copyright Holder). # All rights reserved. # # 1. Redistribution and use of OKL4 (Software) in source and binary # forms, with or without modification, are permitted provided that the # following conditions are met: # #     (a) Redistributions of source code must retain this clause 1 #         (including paragraphs (a), (b) and (c)), clause 2 and clause 3 #         (Licence Terms) and the above copyright notice. # #     (b) Redistributions in binary form must reproduce the above #         copyright notice and the Licence Terms in the documentation and/or #         other materials provided with the distribution. # #     (c) Redistributions in any form must be accompanied by information on #         how to obtain complete source code for: #        (i) the Software; and #        (ii) all accompanying software that uses (or is intended to #        use) the Software whether directly or indirectly.  Such source #        code must: #        (iii) either be included in the distribution or be available #        for no more than the cost of distribution plus a nominal fee; #        and #        (iv) be licensed by each relevant holder of copyright under #        either the Licence Terms (with an appropriate copyright notice) #        or the terms of a licence which is approved by the Open Source #        Initative.  For an executable file, "complete source code" #        means the source code for all modules it contains and includes #        associated build and other files reasonably required to produce #        the executable. # # 2. THIS SOFTWARE IS PROVIDED ``AS IS'' AND, TO THE EXTENT PERMITTED BY # LAW, ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, # THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR # PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED.  WHERE ANY WARRANTY IS # IMPLIED AND IS PREVENTED BY LAW FROM BEING DISCLAIMED THEN TO THE # EXTENT PERMISSIBLE BY LAW: (A) THE WARRANTY IS READ DOWN IN FAVOUR OF # THE COPYRIGHT HOLDER (AND, IN THE CASE OF A PARTICIPANT, THAT # PARTICIPANT) AND (B) ANY LIMITATIONS PERMITTED BY LAW (INCLUDING AS TO # THE EXTENT OF THE WARRANTY AND THE REMEDIES AVAILABLE IN THE EVENT OF # BREACH) ARE DEEMED PART OF THIS LICENCE IN A FORM MOST FAVOURABLE TO # THE COPYRIGHT HOLDER (AND, IN THE CASE OF A PARTICIPANT, THAT # PARTICIPANT). IN THE LICENCE TERMS, "PARTICIPANT" INCLUDES EVERY # PERSON WHO HAS CONTRIBUTED TO THE SOFTWARE OR WHO HAS BEEN INVOLVED IN # THE DISTRIBUTION OR DISSEMINATION OF THE SOFTWARE. # # 3. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY OTHER PARTICIPANT BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This file contains get_sections which extracts the names of sections  from a list of Elf Files  It also returns the names of any files that were not ELF files and  thus could not be opened # some toolchains pass libgcc here, which shouldn't be treated as an additional # linker script, as not_elf is destined to be