Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
98d1d64b
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看板
You need to sign in or sign up before continuing.
提交
98d1d64b
编写于
9月 22, 2013
作者:
D
dsamersoff
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
6aaa3bec
37c16072
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
48 addition
and
19 deletion
+48
-19
agent/src/os/linux/ps_core.c
agent/src/os/linux/ps_core.c
+48
-19
未找到文件。
agent/src/os/linux/ps_core.c
浏览文件 @
98d1d64b
/*
* Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
3
, 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
...
...
@@ -698,29 +698,58 @@ err:
// read segments of a shared object
static
bool
read_lib_segments
(
struct
ps_prochandle
*
ph
,
int
lib_fd
,
ELF_EHDR
*
lib_ehdr
,
uintptr_t
lib_base
)
{
int
i
=
0
;
ELF_PHDR
*
phbuf
;
ELF_PHDR
*
lib_php
=
NULL
;
int
i
=
0
;
ELF_PHDR
*
phbuf
;
ELF_PHDR
*
lib_php
=
NULL
;
if
((
phbuf
=
read_program_header_table
(
lib_fd
,
lib_ehdr
))
==
NULL
)
return
false
;
int
page_size
=
sysconf
(
_SC_PAGE_SIZE
);
if
((
phbuf
=
read_program_header_table
(
lib_fd
,
lib_ehdr
))
==
NULL
)
{
return
false
;
}
// we want to process only PT_LOAD segments that are not writable.
// i.e., text segments. The read/write/exec (data) segments would
// have been already added from core file segments.
for
(
lib_php
=
phbuf
,
i
=
0
;
i
<
lib_ehdr
->
e_phnum
;
i
++
)
{
if
((
lib_php
->
p_type
==
PT_LOAD
)
&&
!
(
lib_php
->
p_flags
&
PF_W
)
&&
(
lib_php
->
p_filesz
!=
0
))
{
if
(
add_map_info
(
ph
,
lib_fd
,
lib_php
->
p_offset
,
lib_php
->
p_vaddr
+
lib_base
,
lib_php
->
p_filesz
)
==
NULL
)
goto
err
;
// we want to process only PT_LOAD segments that are not writable.
// i.e., text segments. The read/write/exec (data) segments would
// have been already added from core file segments.
for
(
lib_php
=
phbuf
,
i
=
0
;
i
<
lib_ehdr
->
e_phnum
;
i
++
)
{
if
((
lib_php
->
p_type
==
PT_LOAD
)
&&
!
(
lib_php
->
p_flags
&
PF_W
)
&&
(
lib_php
->
p_filesz
!=
0
))
{
uintptr_t
target_vaddr
=
lib_php
->
p_vaddr
+
lib_base
;
map_info
*
existing_map
=
core_lookup
(
ph
,
target_vaddr
);
if
(
existing_map
==
NULL
){
if
(
add_map_info
(
ph
,
lib_fd
,
lib_php
->
p_offset
,
target_vaddr
,
lib_php
->
p_filesz
)
==
NULL
)
{
goto
err
;
}
}
else
{
if
((
existing_map
->
memsz
!=
page_size
)
&&
(
existing_map
->
fd
!=
lib_fd
)
&&
(
existing_map
->
memsz
!=
lib_php
->
p_filesz
)){
print_debug
(
"address conflict @ 0x%lx (size = %ld, flags = %d
\n
)"
,
target_vaddr
,
lib_php
->
p_filesz
,
lib_php
->
p_flags
);
goto
err
;
}
/* replace PT_LOAD segment with library segment */
print_debug
(
"overwrote with new address mapping (memsz %ld -> %ld)
\n
"
,
existing_map
->
memsz
,
lib_php
->
p_filesz
);
existing_map
->
fd
=
lib_fd
;
existing_map
->
offset
=
lib_php
->
p_offset
;
existing_map
->
memsz
=
lib_php
->
p_filesz
;
}
lib_php
++
;
}
}
free
(
phbuf
);
return
true
;
lib_php
++
;
}
free
(
phbuf
);
return
true
;
err:
free
(
phbuf
);
return
false
;
free
(
phbuf
);
return
false
;
}
// process segments from interpreter (ld.so or ld-linux.so)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录