Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
21099d66
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
21099d66
编写于
11月 17, 2014
作者:
C
coleenp
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
3fae7243
72aa84c7
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
69 addition
and
650 deletion
+69
-650
make/solaris/makefiles/add_gnu_debuglink.make
make/solaris/makefiles/add_gnu_debuglink.make
+0
-54
make/solaris/makefiles/defs.make
make/solaris/makefiles/defs.make
+50
-1
make/solaris/makefiles/dtrace.make
make/solaris/makefiles/dtrace.make
+9
-30
make/solaris/makefiles/fix_empty_sec_hdr_flags.make
make/solaris/makefiles/fix_empty_sec_hdr_flags.make
+0
-54
make/solaris/makefiles/jsig.make
make/solaris/makefiles/jsig.make
+3
-12
make/solaris/makefiles/saproc.make
make/solaris/makefiles/saproc.make
+3
-12
make/solaris/makefiles/vm.make
make/solaris/makefiles/vm.make
+3
-20
make/windows/makefiles/sa.make
make/windows/makefiles/sa.make
+1
-1
src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c
src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c
+0
-285
src/os/solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c
...solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c
+0
-181
未找到文件。
make/solaris/makefiles/add_gnu_debuglink.make
已删除
100644 → 0
浏览文件 @
3fae7243
#
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
#
# Rules to build add_gnu_debuglink, used by vm.make on Solaris
# Allow $(ADD_GNU_DEBUGLINK) to be called from any directory.
# We don't set or use the GENERATED macro to avoid affecting
# other HotSpot Makefiles.
TOPDIR
=
$(
shell
echo
`
pwd
`
)
ADD_GNU_DEBUGLINK
=
$(TOPDIR)
/../generated/add_gnu_debuglink
ADD_GNU_DEBUGLINK_DIR
=
$(GAMMADIR)
/src/os/solaris/add_gnu_debuglink
ADD_GNU_DEBUGLINK_SRC
=
$(ADD_GNU_DEBUGLINK_DIR)
/add_gnu_debuglink.c
ADD_GNU_DEBUGLINK_FLAGS
=
LIBS_ADD_GNU_DEBUGLINK
+=
-lelf
ifeq
("${Platform_compiler}", "sparcWorks")
# Enable the following ADD_GNU_DEBUGLINK_FLAGS addition if you need to
# compare the built ELF objects.
#
# The -g option makes static data global and the "-W0,-noglobal"
# option tells the compiler to not globalize static data using a unique
# globalization prefix. Instead force the use of a static globalization
# prefix based on the source filepath so the objects from two identical
# compilations are the same.
#
# Note: The blog says to use "-W0,-xglobalstatic", but that doesn't
# seem to work. I got "-W0,-noglobal" from Kelly and that works.
#ADD_GNU_DEBUGLINK_FLAGS += -W0,-noglobal
endif
# Platform_compiler == sparcWorks
$(ADD_GNU_DEBUGLINK)
:
$(ADD_GNU_DEBUGLINK_SRC)
$(CC)
-g
-o
$@
$<
$(ADD_GNU_DEBUGLINK_FLAGS)
$(LIBS_ADD_GNU_DEBUGLINK)
make/solaris/makefiles/defs.make
浏览文件 @
21099d66
#
# Copyright (c) 2006, 201
3
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2006, 201
4
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -133,6 +133,55 @@ ifeq ($(JDK6_OR_EARLIER),0)
OBJCOPY
=
$(
shell
test
-x
$(ALT_OBJCOPY)
&&
echo
$(ALT_OBJCOPY)
)
endif
ifneq
($(OBJCOPY),)
# OBJCOPY version check:
# - version number is last blank separate word on first line
# - version number formats that have been seen:
# - <major>.<minor>
# - <major>.<minor>.<micro>
#
# Full Debug Symbols on Solaris needs version 2.21.1 or newer.
#
OBJCOPY_VERS_CHK
:=
$(
shell
\
$(OBJCOPY)
--version
\
|
sed
-n
\
-e
's/.* //'
\
-e
'/^[01]\./b bad'
\
-e
'/^2\./{'
\
-e
' s/^2\.//'
\
-e
' /^[0-9]$$/b bad'
\
-e
' /^[0-9]\./b bad'
\
-e
' /^1[0-9]$$/b bad'
\
-e
' /^1[0-9]\./b bad'
\
-e
' /^20\./b bad'
\
-e
' /^21\.0$$/b bad'
\
-e
' /^21\.0\./b bad'
\
-e
'
}
'
\
-e
':good'
\
-e
's/.*/VALID_VERSION/p'
\
-e
'q'
\
-e
':bad'
\
-e
's/.*/BAD_VERSION/p'
\
-e
'q'
\
)
ifeq
($(OBJCOPY_VERS_CHK),BAD_VERSION)
_JUNK_
:=
$(
shell
\
echo
>
&2
"WARNING:
$(OBJCOPY)
--version info:"
;
\
$(OBJCOPY)
--version
|
sed
-n
-e
's/^/WARNING: /p'
-e
'q'
>
&2
;
\
echo
>
&2
"WARNING: an objcopy version of 2.21.1 or newer"
\
"is needed to create valid .debuginfo files."
;
\
echo
>
&2
"WARNING: ignoring above objcopy command."
;
\
echo
>
&2
"WARNING: patch 149063-01 or newer contains the"
\
"correct Solaris 10 SPARC version."
;
\
echo
>
&2
"WARNING: patch 149064-01 or newer contains the"
\
"correct Solaris 10 X86 version."
;
\
echo
>
&2
"WARNING: Solaris 11 Update 1 contains the"
\
"correct version."
;
\
)
OBJCOPY
=
endif
endif
ifeq
($(OBJCOPY),)
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: no objcopy cmd found so cannot create .debuginfo files."
)
...
...
make/solaris/makefiles/dtrace.make
浏览文件 @
21099d66
#
# Copyright (c) 2005, 201
3
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
4
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -96,25 +96,16 @@ XLIBJVM_DB_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DB_DIZ)
XLIBJVM_DTRACE_DEBUGINFO
=
$(XLIBJVM_DIR)
/
$(LIBJVM_DTRACE_DEBUGINFO)
XLIBJVM_DTRACE_DIZ
=
$(XLIBJVM_DIR)
/
$(LIBJVM_DTRACE_DIZ)
$(XLIBJVM_DB)
:
$(
ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(
DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
$(XLIBJVM_DB)
:
$(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
@
echo
Making
$@
$(QUIETLY)
mkdir
-p
$(XLIBJVM_DIR)
;
\
$(CC)
$(SYMFLAG)
$
(
ARCHFLAG/
$(ISA)
)
-D
$(TYPE)
-I
.
-I
$(GENERATED)
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DB)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DB)
.c
-lc
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
# Clear the SHF_ALLOC flag (if set) from empty section headers.
# An empty section header has sh_addr == 0 and sh_size == 0.
# This problem has only been seen on Solaris X64, but we call this tool
# on all Solaris builds just in case.
$(QUIETLY)
$(FIX_EMPTY_SEC_HDR_FLAGS)
$@
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(XLIBJVM_DB_DEBUGINFO)
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ;
# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not
# in the link name:
(
cd
$(XLIBJVM_DIR)
&&
$(
ADD_GNU_DEBUGLINK)
$(LIBJVM_DB_DEBUGINFO)
$(LIBJVM_DB)
)
(
cd
$(XLIBJVM_DIR)
&&
$(
OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DB_DEBUGINFO)
$(LIBJVM_DB)
)
ifeq
($(STRIP_POLICY),all_strip)
$(QUIETLY)
$(STRIP)
$@
else
...
...
@@ -131,20 +122,16 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
endif
endif
$(XLIBJVM_DTRACE)
:
$(
ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(
DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
$(XLIBJVM_DTRACE)
:
$(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
@
echo
Making
$@
$(QUIETLY)
mkdir
-p
$(XLIBJVM_DIR)
;
\
$(CC)
$(SYMFLAG)
$
(
ARCHFLAG/
$(ISA)
)
-D
$(TYPE)
-I
.
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DTRACE)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DTRACE)
.c
-lc
-lthread
-ldoor
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# Clear the SHF_ALLOC flag (if set) from empty section headers.
$(QUIETLY)
$(FIX_EMPTY_SEC_HDR_FLAGS)
$@
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(XLIBJVM_DTRACE_DEBUGINFO)
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ;
# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not
# in the link name:
(
cd
$(XLIBJVM_DIR)
&&
$(
ADD_GNU_DEBUGLINK)
$(LIBJVM_DTRACE_DEBUGINFO)
$(LIBJVM_DTRACE)
)
(
cd
$(XLIBJVM_DIR)
&&
$(
OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DTRACE_DEBUGINFO)
$(LIBJVM_DTRACE)
)
ifeq
($(STRIP_POLICY),all_strip)
$(QUIETLY)
$(STRIP)
$@
else
...
...
@@ -201,17 +188,13 @@ $(JVMOFFS).cpp: $(GENOFFS) $(JVMOFFS).h $(JVMOFFS)Index.h
$(JVMOFFS.o)
:
$(JVMOFFS).h $(JVMOFFS).cpp
$(QUIETLY)
$(CXX)
-c
-I
.
-o
$@
$(ARCHFLAG)
-D
$(TYPE)
$(JVMOFFS)
.cpp
$(LIBJVM_DB)
:
$(
ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(
DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE)
$(LIBJVM_DB)
:
$(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE)
@
echo
Making
$@
$(QUIETLY)
$(CC)
$(SYMFLAG)
$(ARCHFLAG)
-D
$(TYPE)
-I
.
-I
$(GENERATED)
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DB)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DB)
.c
-lc
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# Clear the SHF_ALLOC flag (if set) from empty section headers.
$(QUIETLY)
$(FIX_EMPTY_SEC_HDR_FLAGS)
$@
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJVM_DB_DEBUGINFO)
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $@
$(QUIETLY)
$(ADD_GNU_DEBUGLINK)
$(LIBJVM_DB_DEBUGINFO)
$@
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DB_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
$(QUIETLY)
$(STRIP)
$@
else
...
...
@@ -226,17 +209,13 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
endif
endif
$(LIBJVM_DTRACE)
:
$(
ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(
DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
$(LIBJVM_DTRACE)
:
$(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
@
echo
Making
$@
$(QUIETLY)
$(CC)
$(SYMFLAG)
$(ARCHFLAG)
-D
$(TYPE)
-I
.
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DTRACE)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DTRACE)
.c
-lc
-lthread
-ldoor
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# Clear the SHF_ALLOC flag (if set) from empty section headers.
$(QUIETLY)
$(FIX_EMPTY_SEC_HDR_FLAGS)
$@
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJVM_DTRACE_DEBUGINFO)
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $@
$(QUIETLY)
$(ADD_GNU_DEBUGLINK)
$(LIBJVM_DTRACE_DEBUGINFO)
$@
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DTRACE_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
$(QUIETLY)
$(STRIP)
$@
else
...
...
make/solaris/makefiles/fix_empty_sec_hdr_flags.make
已删除
100644 → 0
浏览文件 @
3fae7243
#
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
#
# Rules to build fix_empty_sec_hdr_flags, used by vm.make on Solaris
# Allow $(FIX_EMPTY_SEC_HDR_FLAGS) to be called from any directory.
# We don't set or use the GENERATED macro to avoid affecting
# other HotSpot Makefiles.
TOPDIR
=
$(
shell
echo
`
pwd
`
)
FIX_EMPTY_SEC_HDR_FLAGS
=
$(TOPDIR)
/../generated/fix_empty_sec_hdr_flags
FIX_EMPTY_SEC_HDR_FLAGS_DIR
=
$(GAMMADIR)
/src/os/solaris/fix_empty_sec_hdr_flags
FIX_EMPTY_SEC_HDR_FLAGS_SRC
=
$(FIX_EMPTY_SEC_HDR_FLAGS_DIR)
/fix_empty_sec_hdr_flags.c
FIX_EMPTY_SEC_HDR_FLAGS_FLAGS
=
LIBS_FIX_EMPTY_SEC_HDR_FLAGS
+=
-lelf
ifeq
("${Platform_compiler}", "sparcWorks")
# Enable the following FIX_EMPTY_SEC_HDR_FLAGS_FLAGS addition if you need to
# compare the built ELF objects.
#
# The -g option makes static data global and the "-W0,-noglobal"
# option tells the compiler to not globalize static data using a unique
# globalization prefix. Instead force the use of a static globalization
# prefix based on the source filepath so the objects from two identical
# compilations are the same.
#
# Note: The blog says to use "-W0,-xglobalstatic", but that doesn't
# seem to work. I got "-W0,-noglobal" from Kelly and that works.
#FIX_EMPTY_SEC_HDR_FLAGS_FLAGS += -W0,-noglobal
endif
# Platform_compiler == sparcWorks
$(FIX_EMPTY_SEC_HDR_FLAGS)
:
$(FIX_EMPTY_SEC_HDR_FLAGS_SRC)
$(CC)
-g
-o
$@
$<
$(FIX_EMPTY_SEC_HDR_FLAGS_FLAGS)
$(LIBS_FIX_EMPTY_SEC_HDR_FLAGS)
make/solaris/makefiles/jsig.make
浏览文件 @
21099d66
#
# Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
4
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -47,22 +47,13 @@ else
LFLAGS_JSIG
+=
-mt
-xnolib
endif
$(LIBJSIG)
:
$(
ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(
JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE)
$(LIBJSIG)
:
$(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE)
@
echo
Making signal interposition lib...
$(QUIETLY)
$(CC)
$(SYMFLAG)
$(ARCHFLAG)
$(SHARED_FLAG)
$(PICFLAG)
\
$(LFLAGS_JSIG)
-o
$@
$(JSIGSRCDIR)
/jsig.c
-ldl
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
# Clear the SHF_ALLOC flag (if set) from empty section headers.
# An empty section header has sh_addr == 0 and sh_size == 0.
# This problem has only been seen on Solaris X64, but we call this tool
# on all Solaris builds just in case.
$(QUIETLY)
$(FIX_EMPTY_SEC_HDR_FLAGS)
$@
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJSIG_DEBUGINFO)
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@
$(QUIETLY)
$(ADD_GNU_DEBUGLINK)
$(LIBJSIG_DEBUGINFO)
$@
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJSIG_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
$(QUIETLY)
$(STRIP)
$@
else
...
...
make/solaris/makefiles/saproc.make
浏览文件 @
21099d66
#
# Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
4
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -90,7 +90,7 @@ $(shell uname -r -v \
#SOLARIS_11_B159_OR_LATER=-DSOLARIS_11_B159_OR_LATER
$(LIBSAPROC)
:
$(
ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(
SASRCFILES) $(SADISOBJ) $(SAMAPFILE)
$(LIBSAPROC)
:
$(SASRCFILES) $(SADISOBJ) $(SAMAPFILE)
$(QUIETLY)
if
[
"
$(BOOT_JAVA_HOME)
"
=
""
]
;
then
\
echo
"ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"
;
\
exit
1
;
\
...
...
@@ -121,17 +121,8 @@ $(SADISOBJ): $(SADISSRCFILES)
-c
-o
$(SADISOBJ)
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
# Clear the SHF_ALLOC flag (if set) from empty section headers.
# An empty section header has sh_addr == 0 and sh_size == 0.
# This problem has only been seen on Solaris X64, but we call this tool
# on all Solaris builds just in case.
$(QUIETLY)
$(FIX_EMPTY_SEC_HDR_FLAGS)
$@
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBSAPROC_DEBUGINFO)
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@
$(QUIETLY)
$(ADD_GNU_DEBUGLINK)
$(LIBSAPROC_DEBUGINFO)
$@
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBSAPROC_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
$(QUIETLY)
$(STRIP)
$@
else
...
...
make/solaris/makefiles/vm.make
浏览文件 @
21099d66
#
# Copyright (c) 1998, 201
3
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1998, 201
4
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -152,14 +152,6 @@ JDK_LIBDIR = $(JAVA_HOME)/jre/lib/$(LIBARCH)
# jvm_db & dtrace
include
$(MAKEFILES_DIR)/dtrace.make
#----------------------------------------------------------------------
# add_gnu_debuglink tool
include
$(MAKEFILES_DIR)/add_gnu_debuglink.make
#----------------------------------------------------------------------
# fix_empty_sec_hdr_flags tool
include
$(MAKEFILES_DIR)/fix_empty_sec_hdr_flags.make
#----------------------------------------------------------------------
# JVM
...
...
@@ -299,7 +291,7 @@ else
LINK_VM
=
$(LINK_LIB.CXX)
endif
# making the library:
$(LIBJVM)
:
$(
ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(
LIBJVM.o) $(LIBJVM_MAPFILE)
$(LIBJVM)
:
$(LIBJVM.o) $(LIBJVM_MAPFILE)
ifeq
($(filter -sbfast -xsbfast, $(CFLAGS_BROWSE)),)
@
echo
Linking vm...
$(QUIETLY)
$
(
LINK_LIB.CXX/PRE_HOOK
)
...
...
@@ -307,17 +299,8 @@ ifeq ($(filter -sbfast -xsbfast, $(CFLAGS_BROWSE)),)
$(QUIETLY)
$
(
LINK_LIB.CXX/POST_HOOK
)
$(QUIETLY)
rm
-f
$@
.1
&&
ln
-s
$@
$@
.1
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
# Clear the SHF_ALLOC flag (if set) from empty section headers.
# An empty section header has sh_addr == 0 and sh_size == 0.
# This problem has only been seen on Solaris X64, but we call this tool
# on all Solaris builds just in case.
$(QUIETLY)
$(FIX_EMPTY_SEC_HDR_FLAGS)
$@
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJVM_DEBUGINFO)
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@
$(QUIETLY)
$(ADD_GNU_DEBUGLINK)
$(LIBJVM_DEBUGINFO)
$@
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
$(QUIETLY)
$(STRIP)
$@
else
...
...
make/windows/makefiles/sa.make
浏览文件 @
21099d66
...
...
@@ -111,7 +111,7 @@ SA_LFLAGS = $(SA_LD_FLAGS) -nologo -subsystem:console -machine:$(MACHINE)
SA_LFLAGS
=
$(SA_LFLAGS)
-map
-debug
!
endif
!if
"$(BUILDARCH)"
==
"i486"
SA_LFLAGS
=
$(SAFESEH_FLAG)
$(SA_LFLAGS)
SA_LFLAGS
=
/SAFESEH
$(SA_LFLAGS)
!
endif
SA_CFLAGS
=
$(SA_CFLAGS)
$(MP_FLAG)
...
...
src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c
已删除
100644 → 0
浏览文件 @
3fae7243
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
/*
* Name: add_gnu_debuglink.c
*
* Description: Add a ".gnu_debuglink" section that refers to the specified
* debug_info_path to the specified ELF object.
*
* This program is adapted from the example program shown on the
* elf(3elf) man page and from code from the Solaris compiler
* driver.
*/
/*
* needed to define SHF_EXCLUDE
*/
#define ELF_TARGET_ALL
#include <fcntl.h>
#include <stdio.h>
#include <libelf.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static
void
failure
(
void
);
static
unsigned
int
gnu_debuglink_crc32
(
unsigned
int
crc
,
unsigned
char
*
buf
,
size_t
len
);
void
main
(
int
argc
,
char
**
argv
)
{
/* new ELF section name */
static
char
SEC_NAME
[]
=
".gnu_debuglink"
;
unsigned
char
buffer
[
8
*
1024
];
/* I/O buffer */
int
buffer_len
;
/* buffer length */
char
*
debug_info_path
;
/* debug info path */
void
*
ehdr
;
/* ELF header */
Elf
*
elf
;
/* ELF descriptor */
char
*
elf_ident
;
/* ELF identity string */
char
*
elf_obj
;
/* elf_obj file */
int
fd
;
/* descriptor for files */
unsigned
int
file_crc
=
0
;
/* CRC for debug info file */
int
is_elfclass64
;
/* is an ELFCLASS64 file? */
Elf_Data
*
link_dat
;
/* ELF data for new debug info link */
Elf_Data
*
name_dat
;
/* ELF data for new section name */
Elf_Scn
*
new_scn
;
/* new ELF section descriptor */
void
*
new_shdr
;
/* new ELF section header */
Elf_Scn
*
scn
;
/* ELF section descriptor */
void
*
shdr
;
/* ELF section header */
if
(
argc
!=
3
)
{
(
void
)
fprintf
(
stderr
,
"Usage: %s debug_info_path elf_obj
\n
"
,
argv
[
0
]);
exit
(
2
);
}
debug_info_path
=
argv
[
1
];
/* save for later */
if
((
fd
=
open
(
debug_info_path
,
O_RDONLY
))
==
-
1
)
{
(
void
)
fprintf
(
stderr
,
"%s: cannot open file.
\n
"
,
debug_info_path
);
exit
(
3
);
}
(
void
)
printf
(
"Computing CRC for '%s'
\n
"
,
debug_info_path
);
(
void
)
fflush
(
stdout
);
/* compute CRC for the debug info file */
for
(;;)
{
int
len
=
read
(
fd
,
buffer
,
sizeof
buffer
);
if
(
len
<=
0
)
{
break
;
}
file_crc
=
gnu_debuglink_crc32
(
file_crc
,
buffer
,
len
);
}
(
void
)
close
(
fd
);
/* open the elf_obj */
elf_obj
=
argv
[
2
];
if
((
fd
=
open
(
elf_obj
,
O_RDWR
))
==
-
1
)
{
(
void
)
fprintf
(
stderr
,
"%s: cannot open file.
\n
"
,
elf_obj
);
exit
(
4
);
}
(
void
)
printf
(
"Opening '%s' for update
\n
"
,
elf_obj
);
(
void
)
fflush
(
stdout
);
(
void
)
elf_version
(
EV_CURRENT
);
/* coordinate ELF versions */
/* obtain the ELF descriptors from the input file */
if
((
elf
=
elf_begin
(
fd
,
ELF_C_RDWR
,
NULL
))
==
NULL
)
{
failure
();
}
/* determine if ELFCLASS64 or not? */
elf_ident
=
elf_getident
(
elf
,
NULL
);
is_elfclass64
=
(
elf_ident
[
EI_CLASS
]
==
ELFCLASS64
);
/* get the ELF header */
if
(
is_elfclass64
)
{
ehdr
=
elf64_getehdr
(
elf
);
}
else
{
ehdr
=
elf32_getehdr
(
elf
);
}
if
(
ehdr
==
NULL
)
{
failure
();
}
/* get the ELF section descriptor */
if
(
is_elfclass64
)
{
scn
=
elf_getscn
(
elf
,
((
Elf64_Ehdr
*
)
ehdr
)
->
e_shstrndx
);
}
else
{
scn
=
elf_getscn
(
elf
,
((
Elf32_Ehdr
*
)
ehdr
)
->
e_shstrndx
);
}
if
(
scn
==
NULL
)
{
failure
();
}
/* get the section header */
if
(
is_elfclass64
)
{
shdr
=
elf64_getshdr
(
scn
);
}
else
{
shdr
=
elf32_getshdr
(
scn
);
}
if
(
shdr
==
NULL
)
{
failure
();
}
(
void
)
printf
(
"Adding ELF data for new section name
\n
"
);
(
void
)
fflush
(
stdout
);
name_dat
=
elf_newdata
(
scn
);
name_dat
->
d_buf
=
(
void
*
)
SEC_NAME
;
if
(
is_elfclass64
)
{
name_dat
->
d_off
=
((
Elf64_Shdr
*
)
shdr
)
->
sh_size
+
1
;
}
else
{
name_dat
->
d_off
=
((
Elf32_Shdr
*
)
shdr
)
->
sh_size
+
1
;
}
name_dat
->
d_align
=
1
;
name_dat
->
d_size
=
strlen
(
SEC_NAME
)
+
1
;
new_scn
=
elf_newscn
(
elf
);
if
(
is_elfclass64
)
{
new_shdr
=
elf64_getshdr
(
new_scn
);
((
Elf64_Shdr
*
)
new_shdr
)
->
sh_flags
=
SHF_EXCLUDE
;
((
Elf64_Shdr
*
)
new_shdr
)
->
sh_type
=
SHT_PROGBITS
;
((
Elf64_Shdr
*
)
new_shdr
)
->
sh_name
=
((
Elf64_Shdr
*
)
shdr
)
->
sh_size
;
((
Elf64_Shdr
*
)
new_shdr
)
->
sh_addralign
=
1
;
((
Elf64_Shdr
*
)
shdr
)
->
sh_size
+=
(
strlen
(
SEC_NAME
)
+
1
);
}
else
{
new_shdr
=
elf32_getshdr
(
new_scn
);
((
Elf32_Shdr
*
)
new_shdr
)
->
sh_flags
=
SHF_EXCLUDE
;
((
Elf32_Shdr
*
)
new_shdr
)
->
sh_type
=
SHT_PROGBITS
;
((
Elf32_Shdr
*
)
new_shdr
)
->
sh_name
=
((
Elf32_Shdr
*
)
shdr
)
->
sh_size
;
((
Elf32_Shdr
*
)
new_shdr
)
->
sh_addralign
=
1
;
((
Elf32_Shdr
*
)
shdr
)
->
sh_size
+=
(
strlen
(
SEC_NAME
)
+
1
);
}
(
void
)
printf
(
"Adding ELF data for debug_info_path value
\n
"
);
(
void
)
fflush
(
stdout
);
(
void
)
memset
(
buffer
,
0
,
sizeof
buffer
);
buffer_len
=
strlen
(
debug_info_path
)
+
1
;
/* +1 for NUL */
(
void
)
strncpy
((
char
*
)
buffer
,
debug_info_path
,
buffer_len
);
if
(
buffer_len
%
4
!=
0
)
{
/* not on a 4 byte boundary so pad to the next one */
buffer_len
+=
(
4
-
buffer_len
%
4
);
}
/* save the CRC */
(
void
)
memcpy
(
&
buffer
[
buffer_len
],
&
file_crc
,
sizeof
file_crc
);
buffer_len
+=
sizeof
file_crc
;
link_dat
=
elf_newdata
(
new_scn
);
link_dat
->
d_type
=
ELF_T_BYTE
;
link_dat
->
d_size
=
buffer_len
;
link_dat
->
d_buf
=
buffer
;
link_dat
->
d_align
=
1
;
(
void
)
printf
(
"Saving updates to '%s'
\n
"
,
elf_obj
);
(
void
)
fflush
(
stdout
);
(
void
)
elf_update
(
elf
,
ELF_C_NULL
);
/* recalc ELF memory structures */
(
void
)
elf_update
(
elf
,
ELF_C_WRITE
);
/* write out changes to ELF obj */
(
void
)
elf_end
(
elf
);
/* done with ELF obj */
(
void
)
close
(
fd
);
(
void
)
printf
(
"Done updating '%s'
\n
"
,
elf_obj
);
(
void
)
fflush
(
stdout
);
exit
(
0
);
}
/* end main */
static
void
failure
()
{
(
void
)
fprintf
(
stderr
,
"%s
\n
"
,
elf_errmsg
(
elf_errno
()));
exit
(
5
);
}
/*
* The CRC used in gnu_debuglink, retrieved from
* http://sourceware.org/gdb/current/onlinedocs/gdb/Separate-Debug-Files.html#Separate-Debug-Files.
*/
static
unsigned
int
gnu_debuglink_crc32
(
unsigned
int
crc
,
unsigned
char
*
buf
,
size_t
len
)
{
static
const
unsigned
int
crc32_table
[
256
]
=
{
0x00000000
,
0x77073096
,
0xee0e612c
,
0x990951ba
,
0x076dc419
,
0x706af48f
,
0xe963a535
,
0x9e6495a3
,
0x0edb8832
,
0x79dcb8a4
,
0xe0d5e91e
,
0x97d2d988
,
0x09b64c2b
,
0x7eb17cbd
,
0xe7b82d07
,
0x90bf1d91
,
0x1db71064
,
0x6ab020f2
,
0xf3b97148
,
0x84be41de
,
0x1adad47d
,
0x6ddde4eb
,
0xf4d4b551
,
0x83d385c7
,
0x136c9856
,
0x646ba8c0
,
0xfd62f97a
,
0x8a65c9ec
,
0x14015c4f
,
0x63066cd9
,
0xfa0f3d63
,
0x8d080df5
,
0x3b6e20c8
,
0x4c69105e
,
0xd56041e4
,
0xa2677172
,
0x3c03e4d1
,
0x4b04d447
,
0xd20d85fd
,
0xa50ab56b
,
0x35b5a8fa
,
0x42b2986c
,
0xdbbbc9d6
,
0xacbcf940
,
0x32d86ce3
,
0x45df5c75
,
0xdcd60dcf
,
0xabd13d59
,
0x26d930ac
,
0x51de003a
,
0xc8d75180
,
0xbfd06116
,
0x21b4f4b5
,
0x56b3c423
,
0xcfba9599
,
0xb8bda50f
,
0x2802b89e
,
0x5f058808
,
0xc60cd9b2
,
0xb10be924
,
0x2f6f7c87
,
0x58684c11
,
0xc1611dab
,
0xb6662d3d
,
0x76dc4190
,
0x01db7106
,
0x98d220bc
,
0xefd5102a
,
0x71b18589
,
0x06b6b51f
,
0x9fbfe4a5
,
0xe8b8d433
,
0x7807c9a2
,
0x0f00f934
,
0x9609a88e
,
0xe10e9818
,
0x7f6a0dbb
,
0x086d3d2d
,
0x91646c97
,
0xe6635c01
,
0x6b6b51f4
,
0x1c6c6162
,
0x856530d8
,
0xf262004e
,
0x6c0695ed
,
0x1b01a57b
,
0x8208f4c1
,
0xf50fc457
,
0x65b0d9c6
,
0x12b7e950
,
0x8bbeb8ea
,
0xfcb9887c
,
0x62dd1ddf
,
0x15da2d49
,
0x8cd37cf3
,
0xfbd44c65
,
0x4db26158
,
0x3ab551ce
,
0xa3bc0074
,
0xd4bb30e2
,
0x4adfa541
,
0x3dd895d7
,
0xa4d1c46d
,
0xd3d6f4fb
,
0x4369e96a
,
0x346ed9fc
,
0xad678846
,
0xda60b8d0
,
0x44042d73
,
0x33031de5
,
0xaa0a4c5f
,
0xdd0d7cc9
,
0x5005713c
,
0x270241aa
,
0xbe0b1010
,
0xc90c2086
,
0x5768b525
,
0x206f85b3
,
0xb966d409
,
0xce61e49f
,
0x5edef90e
,
0x29d9c998
,
0xb0d09822
,
0xc7d7a8b4
,
0x59b33d17
,
0x2eb40d81
,
0xb7bd5c3b
,
0xc0ba6cad
,
0xedb88320
,
0x9abfb3b6
,
0x03b6e20c
,
0x74b1d29a
,
0xead54739
,
0x9dd277af
,
0x04db2615
,
0x73dc1683
,
0xe3630b12
,
0x94643b84
,
0x0d6d6a3e
,
0x7a6a5aa8
,
0xe40ecf0b
,
0x9309ff9d
,
0x0a00ae27
,
0x7d079eb1
,
0xf00f9344
,
0x8708a3d2
,
0x1e01f268
,
0x6906c2fe
,
0xf762575d
,
0x806567cb
,
0x196c3671
,
0x6e6b06e7
,
0xfed41b76
,
0x89d32be0
,
0x10da7a5a
,
0x67dd4acc
,
0xf9b9df6f
,
0x8ebeeff9
,
0x17b7be43
,
0x60b08ed5
,
0xd6d6a3e8
,
0xa1d1937e
,
0x38d8c2c4
,
0x4fdff252
,
0xd1bb67f1
,
0xa6bc5767
,
0x3fb506dd
,
0x48b2364b
,
0xd80d2bda
,
0xaf0a1b4c
,
0x36034af6
,
0x41047a60
,
0xdf60efc3
,
0xa867df55
,
0x316e8eef
,
0x4669be79
,
0xcb61b38c
,
0xbc66831a
,
0x256fd2a0
,
0x5268e236
,
0xcc0c7795
,
0xbb0b4703
,
0x220216b9
,
0x5505262f
,
0xc5ba3bbe
,
0xb2bd0b28
,
0x2bb45a92
,
0x5cb36a04
,
0xc2d7ffa7
,
0xb5d0cf31
,
0x2cd99e8b
,
0x5bdeae1d
,
0x9b64c2b0
,
0xec63f226
,
0x756aa39c
,
0x026d930a
,
0x9c0906a9
,
0xeb0e363f
,
0x72076785
,
0x05005713
,
0x95bf4a82
,
0xe2b87a14
,
0x7bb12bae
,
0x0cb61b38
,
0x92d28e9b
,
0xe5d5be0d
,
0x7cdcefb7
,
0x0bdbdf21
,
0x86d3d2d4
,
0xf1d4e242
,
0x68ddb3f8
,
0x1fda836e
,
0x81be16cd
,
0xf6b9265b
,
0x6fb077e1
,
0x18b74777
,
0x88085ae6
,
0xff0f6a70
,
0x66063bca
,
0x11010b5c
,
0x8f659eff
,
0xf862ae69
,
0x616bffd3
,
0x166ccf45
,
0xa00ae278
,
0xd70dd2ee
,
0x4e048354
,
0x3903b3c2
,
0xa7672661
,
0xd06016f7
,
0x4969474d
,
0x3e6e77db
,
0xaed16a4a
,
0xd9d65adc
,
0x40df0b66
,
0x37d83bf0
,
0xa9bcae53
,
0xdebb9ec5
,
0x47b2cf7f
,
0x30b5ffe9
,
0xbdbdf21c
,
0xcabac28a
,
0x53b39330
,
0x24b4a3a6
,
0xbad03605
,
0xcdd70693
,
0x54de5729
,
0x23d967bf
,
0xb3667a2e
,
0xc4614ab8
,
0x5d681b02
,
0x2a6f2b94
,
0xb40bbe37
,
0xc30c8ea1
,
0x5a05df1b
,
0x2d02ef8d
};
unsigned
char
*
end
;
crc
=
~
crc
&
0xffffffff
;
for
(
end
=
buf
+
len
;
buf
<
end
;
++
buf
)
{
crc
=
crc32_table
[(
crc
^
*
buf
)
&
0xff
]
^
(
crc
>>
8
);
}
return
~
crc
&
0xffffffff
;
}
src/os/solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c
已删除
100644 → 0
浏览文件 @
3fae7243
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
/*
* Name: fix_empty_sec_hdr_flags.c
*
* Description: Remove the SHF_ALLOC flag from "empty" section headers.
* An "empty" section header has sh_addr == 0 and sh_size == 0.
*
* This program is adapted from the example program shown on the
* elf(3elf) man page and from code from the Solaris compiler
* driver.
*/
#include <fcntl.h>
#include <stdio.h>
#include <libelf.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static
void
failure
(
void
);
void
main
(
int
argc
,
char
**
argv
)
{
void
*
ehdr
;
/* ELF header */
unsigned
int
i
;
/* section counter */
int
fd
;
/* descriptor for file */
Elf
*
elf
;
/* ELF descriptor */
char
*
elf_ident
;
/* ELF identity string */
char
*
elf_obj
;
/* elf_obj file */
int
fix_count
;
/* number of flags fixed */
int
is_elfclass64
;
/* is an ELFCLASS64 file? */
Elf_Scn
*
scn
;
/* ELF section descriptor */
void
*
shdr
;
/* ELF section header */
Elf_Data
*
shstrtab
;
/* ELF section header string table */
if
(
argc
!=
2
)
{
(
void
)
fprintf
(
stderr
,
"Usage: %s elf_obj
\n
"
,
argv
[
0
]);
exit
(
2
);
}
/* open the elf_obj */
elf_obj
=
argv
[
1
];
if
((
fd
=
open
(
elf_obj
,
O_RDWR
))
==
-
1
)
{
(
void
)
fprintf
(
stderr
,
"%s: cannot open file.
\n
"
,
elf_obj
);
exit
(
3
);
}
(
void
)
printf
(
"Opening '%s' for update
\n
"
,
elf_obj
);
(
void
)
fflush
(
stdout
);
(
void
)
elf_version
(
EV_CURRENT
);
/* coordinate ELF versions */
/* obtain the ELF descriptors from the input file */
if
((
elf
=
elf_begin
(
fd
,
ELF_C_RDWR
,
NULL
))
==
NULL
)
{
failure
();
}
/* determine if ELFCLASS64 or not? */
elf_ident
=
elf_getident
(
elf
,
NULL
);
is_elfclass64
=
(
elf_ident
[
EI_CLASS
]
==
ELFCLASS64
);
/* get the ELF header */
if
(
is_elfclass64
)
{
ehdr
=
elf64_getehdr
(
elf
);
}
else
{
ehdr
=
elf32_getehdr
(
elf
);
}
if
(
ehdr
==
NULL
)
{
failure
();
}
/* get the ELF section descriptor */
if
(
is_elfclass64
)
{
scn
=
elf_getscn
(
elf
,
((
Elf64_Ehdr
*
)
ehdr
)
->
e_shstrndx
);
}
else
{
scn
=
elf_getscn
(
elf
,
((
Elf32_Ehdr
*
)
ehdr
)
->
e_shstrndx
);
}
if
(
scn
==
NULL
)
{
failure
();
}
/* get the section header string table */
shstrtab
=
elf_getdata
(
scn
,
NULL
);
if
(
shstrtab
==
NULL
)
{
failure
();
}
fix_count
=
0
;
/* traverse the sections of the input file */
for
(
i
=
1
,
scn
=
NULL
;
scn
=
elf_nextscn
(
elf
,
scn
);
i
++
)
{
int
has_flag_set
;
/* is SHF_ALLOC flag set? */
int
is_empty
;
/* is section empty? */
char
*
name
;
/* short hand pointer */
/* get the section header */
if
(
is_elfclass64
)
{
shdr
=
elf64_getshdr
(
scn
);
}
else
{
shdr
=
elf32_getshdr
(
scn
);
}
if
(
shdr
==
NULL
)
{
failure
();
}
if
(
is_elfclass64
)
{
name
=
(
char
*
)
shstrtab
->
d_buf
+
((
Elf64_Shdr
*
)
shdr
)
->
sh_name
;
}
else
{
name
=
(
char
*
)
shstrtab
->
d_buf
+
((
Elf32_Shdr
*
)
shdr
)
->
sh_name
;
}
if
(
is_elfclass64
)
{
has_flag_set
=
((
Elf64_Shdr
*
)
shdr
)
->
sh_flags
&
SHF_ALLOC
;
is_empty
=
((
Elf64_Shdr
*
)
shdr
)
->
sh_addr
==
0
&&
((
Elf64_Shdr
*
)
shdr
)
->
sh_size
==
0
;
}
else
{
has_flag_set
=
((
Elf32_Shdr
*
)
shdr
)
->
sh_flags
&
SHF_ALLOC
;
is_empty
=
((
Elf32_Shdr
*
)
shdr
)
->
sh_addr
==
0
&&
((
Elf32_Shdr
*
)
shdr
)
->
sh_size
==
0
;
}
if
(
is_empty
&&
has_flag_set
)
{
(
void
)
printf
(
"section[%u] '%s' is empty, "
"but SHF_ALLOC flag is set.
\n
"
,
i
,
name
);
(
void
)
printf
(
"Clearing the SHF_ALLOC flag.
\n
"
);
if
(
is_elfclass64
)
{
((
Elf64_Shdr
*
)
shdr
)
->
sh_flags
&=
~
SHF_ALLOC
;
}
else
{
((
Elf32_Shdr
*
)
shdr
)
->
sh_flags
&=
~
SHF_ALLOC
;
}
fix_count
++
;
}
}
/* end for each ELF section */
if
(
fix_count
>
0
)
{
(
void
)
printf
(
"Saving %d updates to '%s'
\n
"
,
fix_count
,
elf_obj
);
(
void
)
fflush
(
stdout
);
(
void
)
elf_update
(
elf
,
ELF_C_NULL
);
/* recalc ELF memory structures */
(
void
)
elf_update
(
elf
,
ELF_C_WRITE
);
/* write out changes to ELF obj */
}
else
{
(
void
)
printf
(
"No SHF_ALLOC flags needed to be cleared.
\n
"
);
}
(
void
)
elf_end
(
elf
);
/* done with ELF obj */
(
void
)
close
(
fd
);
(
void
)
printf
(
"Done %s '%s'
\n
"
,
(
fix_count
>
0
)
?
"updating"
:
"with"
,
elf_obj
);
(
void
)
fflush
(
stdout
);
exit
(
0
);
}
/* end main */
static
void
failure
()
{
(
void
)
fprintf
(
stderr
,
"%s
\n
"
,
elf_errmsg
(
elf_errno
()));
exit
(
6
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录