From: Chen Gang <gang.chen.5i5j@gmail.com>
To: James Hogan <james.hogan@imgtec.com>
Cc: rostedt@goodmis.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
linux-metag@vger.kernel.org
Subject: Re: [PATCH] arch: metag: lib: add "umoddi3.S" file for __umoddi3()
Date: Thu, 19 Dec 2013 21:37:59 +0800 [thread overview]
Message-ID: <52B2F6B7.1050802@gmail.com> (raw)
In-Reply-To: <52B2E3DB.7010008@imgtec.com>
On 12/19/2013 08:17 PM, James Hogan wrote:
> On 19/12/13 12:05, Chen Gang wrote:
>> Use objdump to get "umoddi3.S" for __umoddi3(), the original binary
>> file is "gcc-4.2.4-final/gcc/libgcc/umoddi3.o" which is generated by
>> "gcc-4.2.4/gcc/libgcc2.c".
>>
>> The relate error with allmodconfig:
>>
>> MODPOST 2909 modules
>> ERROR: "__umoddi3" [drivers/target/target_core_mod.ko] undefined!
>
> _umoddi3 is a 64bit division, which should be using the proper division
> functions provided by the kernel in <linux/math64.h>.
>
> It needs fixing wherever it comes from in drivers/target/target_core_mod.ko.
>
After disassemble target_core_mod.ko, for me, the compiler will use
___umoddi3 for '%' operator and use ___udivsi3 for '/' operator.
If what I guess is correct, we need use/copy the "system library" which
compiler provides, so just use its ".o" file is OK (just like another
"arch/metag/lib/*.S" have done).
The related C code is below:
463 static inline int core_alua_state_lba_dependent(
464 struct se_cmd *cmd,
465 struct t10_alua_tg_pt_gp *tg_pt_gp,
466 u8 *alua_ascq)
467 {
468 struct se_device *dev = cmd->se_dev;
469 u32 segment_size, segment_mult, sectors;
470 u64 lba;
471
472 /* Only need to check for cdb actually containing LBAs */
473 if (!cmd->se_cmd_flags & SCF_SCSI_DATA_CDB)
474 return 0;
475
476 spin_lock(&dev->t10_alua.lba_map_lock);
477 segment_size = dev->t10_alua.lba_map_segment_size;
478 segment_mult = dev->t10_alua.lba_map_segment_multiplier;
479 sectors = cmd->data_length / dev->dev_attrib.block_size; /* use ___udivsi3 */
480
481 lba = cmd->t_task_lba;
482 while (lba < cmd->t_task_lba + sectors) {
483 struct t10_alua_lba_map *cur_map = NULL, *map;
484 struct t10_alua_lba_map_member *map_mem;
485
486 list_for_each_entry(map, &dev->t10_alua.lba_map_list,
487 lba_map_list) {
488 u64 start_lba, last_lba;
489 u64 first_lba = map->lba_map_first_lba;
490
491 if (segment_mult) {
492 start_lba = lba % (segment_size * segment_mult); /* use ___umoddi3 */
493 last_lba = first_lba + segment_size - 1;
494 if (start_lba >= first_lba &&
495 start_lba <= last_lba) {
...
The related disassemble code is below:
280: ed 06 18 a7 GETD D0Ar2,[A0FrP+#52]
284: 24 d5 38 c6 GETD D1.7,[D0Ar2+#84]
288: 04 0e 18 01 MOV D1Ar1,D1.7
28c: 20 1c 18 03 ADD D1Ar1,D1Ar1,#0x384
290: f5 05 18 a5 SETD [A0FrP+#44],D1Ar1
294: 14 00 00 ab CALLR D1RtP,294 <__raw_spin_lock+0x294>
298: ed 06 20 a7 GETD D0FrT,[A0FrP+#52]
29c: 05 1e 08 00 MOV D0Ar6,D1.7
2a0: 24 0a 19 c6 GETD D1Ar1,[D0FrT+#40]
2a4: ad 9c 18 a7 GETD D0Ar2,[D0Ar6+#1252]
2a8: 35 76 08 a7 GETD D1Ar5,[D0Ar6+#944]
2ac: ad 75 28 a7 GETD D0.5,[D0Ar6+#940]
2b0: 75 05 08 a5 SETD [A0FrP+#40],D1Ar5
2b4: 14 00 00 ab CALLR D1RtP,2b4 <___udivsi3+0x2b4>
2b8: ed 06 10 a7 GETD D0Ar4,[A0FrP+#52]
2bc: 6d 05 18 a7 GETD D0Ar2,[A0FrP+#40]
2c0: 04 00 00 03 MOV D1Re0,#0
2c4: 22 9c 30 c7 GETL D0.6,D1.6,[D0Ar4+#224]
2c8: 40 ca 20 60 MULD D0FrT,D0Ar2,D0.5
2cc: 00 0c 00 08 ADDS D0Re0,D0Re0,D0.6
2d0: 04 0e 18 01 MOV D1Ar1,D1.7
2d4: 00 0c 00 01 ADD D1Re0,D1Re0,D1.6
2d8: a0 1d 18 03 ADD D1Ar1,D1Ar1,#0x3b4
2dc: 46 00 00 07 ADDCS D1Re0,D1Re0,#0x1
2e0: 04 08 08 00 MOV D0Ar6,D0FrT
2e4: 04 00 08 03 MOV D1Ar5,#0
2e8: 04 0a 10 00 MOV D0Ar4,D0.5
2ec: 04 00 10 03 MOV D1Ar3,#0
2f0: 75 08 18 a5 SETD [A0FrP+#64],D1Ar1
2f4: ef 03 00 a5 SETL [A0FrP+#56],D0Re0,D1Re0
2f8: 6f 02 08 a5 SETL [A0FrP+#32],D0Ar6,D1Ar5
2fc: ef 04 10 a5 SETL [A0FrP+#72],D0Ar4,D1Ar3
300: 40 0b 00 a0 B 468 <_target_alua_state_check+0x468>
304: 05 1e 08 00 MOV D0Ar6,D1.7
308: ad 76 20 a7 GETD D0FrT,[D0Ar6+#948]
30c: a0 06 00 a0 B 3e0 <_target_alua_state_check+0x3e0>
310: 75 05 08 a7 GETD D1Ar5,[A0FrP+#40]
314: 22 c0 29 c7 GETL D0.5,D1.5,[D0.7]
318: 00 00 08 73 CMP D1Ar5,#0
31c: c2 03 00 a0 BEQ 394 <_target_alua_state_check+0x394>
320: 6f 02 10 a7 GETL D0Ar4,D1Ar3,[A0FrP+#32]
324: 04 0c 18 00 MOV D0Ar2,D0.6
328: 04 0c 18 01 MOV D1Ar1,D1.6
32c: 14 00 00 ab CALLR D1RtP,32c <___umoddi3+0x32c>
330: 00 40 01 71 CMP D1.5,D1Re0
334: 52 05 00 a0 BHI 3dc <_target_alua_state_check+0x3dc>
338: 00 40 01 71 CMP D1.5,D1Re0
33c: 64 00 00 a0 BNE 348 <_target_alua_state_check+0x348>
340: 00 40 01 70 CMP D0.5,D0Re0
344: d2 04 00 a0 BHI 3dc <_target_alua_state_check+0x3dc>
348: ef 04 08 a7 GETL D0Ar6,D1Ar5,[A0FrP+#72]
34c: fe ff 1f 02 MOV D0Ar2,#-1
350: fe ff 1f 03 MOV D1Ar1,#-1
...
Thanks.
--
Chen Gang
Open, share and attitude like air, water and life which God blessed
next prev parent reply other threads:[~2013-12-19 13:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-19 12:05 [PATCH] arch: metag: lib: add "umoddi3.S" file for __umoddi3() Chen Gang
2013-12-19 12:17 ` James Hogan
2013-12-19 12:17 ` James Hogan
2013-12-19 13:37 ` Chen Gang [this message]
2013-12-19 13:47 ` James Hogan
2013-12-19 13:47 ` James Hogan
[not found] ` <52B2F8DC.8060006-1AXoQHu6uovQT0dZR+AlfA@public.gmane.org>
2013-12-20 1:44 ` Chen Gang
2013-12-20 1:44 ` Chen Gang
2013-12-20 9:30 ` James Hogan
2013-12-20 9:30 ` James Hogan
2013-12-20 10:20 ` Chen Gang
2013-12-20 10:48 ` James Hogan
2013-12-20 10:48 ` James Hogan
[not found] ` <52B4208B.1080801-1AXoQHu6uovQT0dZR+AlfA@public.gmane.org>
2013-12-20 11:51 ` Chen Gang
2013-12-20 11:51 ` Chen Gang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52B2F6B7.1050802@gmail.com \
--to=gang.chen.5i5j@gmail.com \
--cc=james.hogan@imgtec.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-metag@vger.kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.