* prettify the "Use of -offset(%ebp) is not recommended for local variable

access" warning by showing the exact register used (bp, ebp or rbp) and using
  the original asm syntax

git-svn-id: trunk@42208 -
This commit is contained in:
nickysn 2019-06-10 15:26:46 +00:00
parent 1e07606cbf
commit 4f2ab3fb11
4 changed files with 242 additions and 214 deletions

View File

@ -2764,7 +2764,7 @@ asmr_w_no_direct_ebp_for_parameter=07102_W_Use of $1 for parameters invalid here
asmr_w_direct_ebp_for_parameter_regcall=07103_W_Use of $1 is not compatible with regcall convention
% Using direct 8(%ebp) reference for function/procedure parameters is invalid
% if parameters are in registers.
asmr_w_direct_ebp_neg_offset=07104_W_Use of -offset(%ebp) is not recommended for local variable access
asmr_w_direct_ebp_neg_offset=07104_W_Use of $1 is not recommended for local variable access
% Using -8(%ebp) to access a local variable is not recommended
asmr_w_direct_esp_neg_offset=07105_W_Use of -offset(%esp), access may cause a crash or value may be lost
% Using -8(%esp) to access a local stack is not recommended, as

View File

@ -1110,7 +1110,7 @@ const
option_info=11024;
option_help_pages=11025;
MsgTxtSize = 83020;
MsgTxtSize = 83009;
MsgIdxMax : array[1..20] of longint=(
28,106,351,126,99,61,142,34,221,67,

File diff suppressed because it is too large Load Diff

View File

@ -290,7 +290,35 @@ begin
message1(asmr_w_direct_ebp_for_parameter_regcall,ErrorRefStr);
end
else if (getsupreg(opr.ref.base)=RS_EBP) and (opr.ref.offset<0) then
message(asmr_w_direct_ebp_neg_offset)
begin
if current_settings.asmmode in [asmmode_i8086_intel,asmmode_i386_intel,asmmode_x86_64_intel] then
begin
case getsubreg(opr.ref.base) of
R_SUBW:
ErrorRefStr:='[BP-offset]';
R_SUBD:
ErrorRefStr:='[EBP-offset]';
R_SUBQ:
ErrorRefStr:='[RBP-offset]';
else
internalerror(2019061003);
end;
end
else
begin
case getsubreg(opr.ref.base) of
R_SUBW:
ErrorRefStr:='-offset(%bp)';
R_SUBD:
ErrorRefStr:='-offset(%ebp)';
R_SUBQ:
ErrorRefStr:='-offset(%rbp)';
else
internalerror(2019061004);
end;
end;
message1(asmr_w_direct_ebp_neg_offset,ErrorRefStr);
end
else if (getsupreg(opr.ref.base)=RS_ESP) and (opr.ref.offset<0) then
message(asmr_w_direct_esp_neg_offset);
end;